Aim

This script shows how to estimate spillover from single metal spots on an agarose coated slide. This short script illustrates how the helper function ‘estimate_sm_from_imc_txtfol’ can be used to estimate a spillover matrix from a folder containing all acquisitions in .txt format in one single function call.

library(CATALYST)
library(data.table)
library(ggplot2)
library(flowCore)
library(dplyr)
library(dtplyr)
library(stringr)
library(ggpmisc)
source('spillover_imc_helpers.R')

setup the configuration variables

# a folder containing a complete single stain acquisition
fol_ss = '../data/Figure_S5/Spillover_Matrix_2'

Example for estimation of the spillover matrix from a folder of single stains with single stains parsed from naming: xxx_x_metal_x.txt? (E.g. Dy161 1-1000_8_Dy161_8.txt)

#' estimate_sm_from_imc_txtfol
#' Estimates spillover directly from a folder containing IMC .txt files
#'
#' @param fol_ss folder containing .txt acquisitions of IMC single stains
#' @param ssmetals_from_fn logical, Are the single stains correctly named xxx_x_metal_x.txt? (E.g. Dy161 1-1000_8_Dy161_8.txt
#' @param ssmetals Vector of masses of the single stains used. Required if ssmetals_from_file_fn is False
#' @param fn2ssmetal Optional: a named vector mapping the filenames to the single stain metal used (e.g. if it cannot be parsed from the filename)
#' @param remove_incorrect_bc Remove barcodes not matching the filename single stain annotation (requires either ssmetals_from_fn=T or fn2ssmetal )
#' @param minevents Minimal number of events (after debarcoding) that need to be present in a single stain in order that a spillover estimation is performed
#' @param bin_n_pixels Optional: integer, bin n consecutive pixels. Can be used if the intensities per pixel are to low (e.g. <200 counts)
#' @param ... Optional parameters will be passed to CATALYST::computeSpillmat 
res = estimate_sm_from_imc_txtfol(fol_ss, ssmetals_from_fn=T)
## Debarcoding data...
##  o ordering
##  o classifying events
## Normalizing...
## Computing deltas...
## Computing counts and yields...

Plot of the spillover matrix estimated (1:10000 is just to circumvent the requirement of the plotSpillmat function to have single stain masses provided)

CATALYST::plotSpillmat(1:10000,res[['sm']])
## We recommend that you use the dev version of ggplot2 with `ggplotly()`
## Install it with: `devtools::install_github('hadley/ggplot2')`

Quality control: Distribution of medians per file

plot_file_medians(res[['data']])

In case the spillover matrix should be written out

#write.csv(res[['sm']],file = 'path/sm.csv')

Alternatively the function can also be called with a list of single stain masses, if the metals are not contained in the filename

ssmass = c(161, 162, 163, 164, 166, 167, 168, 170, 151, 153, 155, 156, 158, 160, 165, 113, 115, 175, 142, 143, 144, 145, 146, 148, 150, 141, 147, 149, 152, 154, 159, 169, 171, 172, 173, 174, 176)
res = estimate_sm_from_imc_txtfol(fol_ss, ssmetals_from_fn=F,ssmass = ssmass, remove_incorrect_bc = F )
## Debarcoding data...
##  o ordering
##  o classifying events
## Normalizing...
## Computing deltas...
## Computing counts and yields...
CATALYST::plotSpillmat(1:10000,res[['sm']])
## We recommend that you use the dev version of ggplot2 with `ggplotly()`
## Install it with: `devtools::install_github('hadley/ggplot2')`
sessionInfo()
## R version 3.4.1 (2017-06-30)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 14.04.5 LTS
## 
## Matrix products: default
## BLAS: /usr/lib/openblas-base/libblas.so.3
## LAPACK: /usr/lib/lapack/liblapack.so.3.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] stringi_1.1.7       ggpmisc_0.2.16      stringr_1.3.0      
## [4] dtplyr_0.0.2        dplyr_0.7.4         flowCore_1.42.3    
## [7] ggplot2_2.2.1       data.table_1.10.4-3 CATALYST_1.1.5     
## 
## loaded via a namespace (and not attached):
##  [1] Biobase_2.36.2      httr_1.3.1          tidyr_0.8.0        
##  [4] viridisLite_0.3.0   jsonlite_1.5        splines_3.4.1      
##  [7] gtools_3.5.0        shiny_1.0.5         assertthat_0.2.0   
## [10] stats4_3.4.1        yaml_2.1.18         robustbase_0.92-8  
## [13] pillar_1.2.1        backports_1.1.2     lattice_0.20-35    
## [16] quantreg_5.35       glue_1.2.0          digest_0.6.15      
## [19] RColorBrewer_1.1-2  minqa_1.2.4         colorspace_1.3-2   
## [22] sandwich_2.4-0      httpuv_1.3.6.2      htmltools_0.3.6    
## [25] Matrix_1.2-13       plyr_1.8.4          pcaPP_1.9-73       
## [28] pkgconfig_2.0.1     SparseM_1.77        xtable_1.8-2       
## [31] purrr_0.2.4         corpcor_1.6.9       mvtnorm_1.0-7      
## [34] scales_0.5.0        lme4_1.1-15         MatrixModels_0.4-1 
## [37] tibble_1.4.2        mgcv_1.8-23         car_2.1-6          
## [40] TH.data_1.0-8       nnet_7.3-12         BiocGenerics_0.22.1
## [43] lazyeval_0.2.1      pbkrtest_0.4-7      mime_0.5           
## [46] survival_2.41-3     magrittr_1.5        evaluate_0.10.1    
## [49] nlme_3.1-137        MASS_7.3-49         graph_1.54.0       
## [52] tools_3.4.1         matrixStats_0.53.1  multcomp_1.4-8     
## [55] plotly_4.7.1        munsell_0.4.3       cluster_2.0.7      
## [58] plotrix_3.7         bindrcpp_0.2        compiler_3.4.1     
## [61] rlang_0.2.0         grid_3.4.1          nloptr_1.0.4       
## [64] drc_3.0-1           htmlwidgets_1.0     crosstalk_1.0.0    
## [67] labeling_0.3        rmarkdown_1.9       gtable_0.2.0       
## [70] codetools_0.2-15    reshape2_1.4.3      rrcov_1.4-3        
## [73] R6_2.2.2            gridExtra_2.3       nnls_1.4           
## [76] zoo_1.8-1           knitr_1.20          bindr_0.1.1        
## [79] rprojroot_1.3-2     parallel_3.4.1      Rcpp_0.12.16       
## [82] DEoptimR_1.0-8